<?php
namespace App\Services;

use App\Models\Traning;
use App\Models\UserTraningRelation;
use App\Traits\PageTrait ;

class TraningService
{
    use PageTrait;

    public function dashboard()
    {
        return [
            'active_num' => Traning::where('start_time', '<', date('Y-m-d'))->where('end_time', '>', date('Y-m-d'))->count(),
            'not_start_num' => Traning::where('start_time', '>', date('Y-m-d'))->count(),
            'end_num' => Traning::where('end_time', '<', date('Y-m-d'))->count()
        ];
    }

    /**
     * 获取课程列表
     * @param array $condition 条件
     * @param string $sort 排序
     */ 
    public function getList($condition, $sort = 'id', $sortable = 'desc')
    {
    
        $query = Traning::query();
        $query->select('id','title','thumb', 'start_time', 'end_time','traning_status', 'type', 'teacher','is_audit');
        //搜索
        if(isset($condition['name'])) {
            $query->where('name', 'like', '%'.$condition['name'].'%');
        }
        $query->where('status', 0);
        //排序
        $query->orderBy($sort, $sortable);
        return self::JsonPage($query);
    }
    /**
     * 获取推荐课程
     * @param int $type 1:视频 2:直播
     */
    public function getRecommend($type = 1, $limit)
    {
        return Traning::query()->where('type', $type)->where('status', 0)->where('is_recommend', 1)->limit($limit)->get();
    }
    /**
     * 获取课程详情
     */
    public function getDetail($id)
    {
        return Traning::query()->select('id','title','thumb', 'start_time', 'end_time','traning_status', 'type', 'teacher','is_audit')->with(['course'])->where('id', $id)->firstOrFail();
    }
    

    /**
     * 增加指定培训课程的参与人数
     *
     * 本函数通过数据库查询找到特定的培训课程，然后将参与人数加1。使用raw表达式来实现实时计算加1后的参与人数。
     *
     * @param int $id 培训课程的ID，用于定位数据库中的特定记录
     *
     * @return int 更新受影响的行数，表示参与人数增加的操作结果
     */
    public function join($id)
    {
        // 使用查询构建器找到特定id的培训课程，并将join_num字段加1
        $userId = auth()->id();
        UserTraningRelation::create(['user_id' => $userId, 'traning_id' =>$id]);
        return Traning::query()->where('id', $id)->update(['join_num' => \DB::raw('join_num+1')]);
    }
}